
//todo
// 假设有k个人质和k个绑匪围成一圈。人质的编号从1到k，绑匪的编号从k+1到2k。
// 从编号1开始，每次从其中选出第m个人(隔m-1选出一人)出列。
// 希望求出m的最小值，使得最先出列的k个人都是绑匪，即都是编号从k+1到2k的人。
#include "iostream"
#include "vector"
#include "unordered_map"
#include "algorithm"

int getval(int x,int y){
    if(x==y||x==-y){
        return 1;
    }
    if(y>x&&y>-x){
        return 3;
    }
    if(y<x&&y<-x){
        return 2;
    }
    if(y>x&&y<-x){
        return 4;
    }
    if(y<x&&y>-x){
        return 5;
    }
    return 2;
}
int main() {
    int a;
//    int
//    is_huiwen(1441,10);
    while (std::cin >> a) {
        for(int i=-a;i<=a;i++){//行
            for(int j=-a;j<=a;j++){//列
                if(j!=-a){
                    printf(" ");
                }
                printf("%d", getval(j,i));
                if(j==a){
                    printf("\n");
                }
            }
        }
    }
//    while(1){}
    return 0;
}

